package com.drelephant.commons;

import com.drelephant.commons.req.BaseChannelReq;
import com.drelephant.commons.sdk.VerifyException;

/**
 * @author wenshuai@hz-health.cn
 */
public interface Verify {

    /**
     * 加密/加签
     * @param appKey    渠道编码
     * @param reqData   请求体 单级结构
     * @param pubKey    大象公钥
     * @param appPriKey    渠道私钥
     * @return  大象请求对象
     * @throws VerifyException 验证异常
     */
    BaseChannelReq<?> encrypt(String appKey, Object reqData, String pubKey, String appPriKey) throws VerifyException;

    /**
     * 解密/验签
     * @param channelReq        大象请求对象
     * @param clazz             返回对象的具体类型
     * @param appPubKey         渠道公钥
     * @param priKey            大象私钥
     * @return  请求体
     * @throws VerifyException 验证异常
     */
    <T> T decrypt(BaseChannelReq<?> channelReq, Class<T> clazz, String appPubKey, String priKey) throws VerifyException;
}
